結合交叉驗證之遞迴特徵刪除(recursive feature elimination with cross-validation, RFECV)屬於特徵篩選(feature selection)中的包裹式(wrapper)。
昨天跑了RFECV發現效果不錯,想知道它的原理但網路上都只介紹RFE,而關於RFECV的介紹都草草帶過,所以我直接看sklearn代碼整理出流程,並且跟大家分享
包裹式是由兩個部件組成建立:
在介紹RFECV前,需要先科普一下什麼是RFE。首先,當我們準備好數據並且決定要用什麼模型後,首先將所有特徵灌入模型進行訓練,然後刪除step個回歸係數最小的特徵;緊接著用剩餘特徵重新訓練一個新模型後再刪除step個回歸係數最小的特徵,如此反覆循環直到剩餘特徵數目等於我們的期望數字,就是這麼簡單,流程圖在下面:
RFECV其實就是RFE結合KFOLD。實際計算方法為,將數據分割為K-FOLD個,然後分別執行一次RFE(砍到剩1個特徵),須注意我們這次需要記下每次循環所得到的預測誤差。
舉個例子:
step1. 我們有一個總特徵數n=16的數據,令每次刪除特徵數step=1,將數據分成3個FOLD
step2. 因為想知道k=1~16相應的最佳組合,因此我們必須強制令每個RFE的關鍵特徵數目k=1
step3. 對每個FOLD執行RFE,然後要記得每次迭代都要記錄預測誤差,因為特徵是從16=>15=>14=>...=>2=>1,所以每個RFV會有16個預測誤差,三個FOLD就有3x16個預測誤差(誤差矩陣)
step4. 將誤差矩陣取平均,會得到1x16的數列(平均誤差矩陣),gridscore就是從這來的
step5. 從平均誤差矩陣中找出誤差最小相應的特徵數目a,這也是sklearn RFECV會幫我們自動挑選最佳特徵數目的原因
step6. 用完整的數據跑一次RFE(令k=a),完工